#include"process.h"

//进度条末尾的动态图案
const char* str="|/-\\";

//实现进度条基本功能的版本
void process(){
    int t = 0;
    char pr[size]; //进度条字符数组
    int str_time = 0;
    int strt = 0; //控制进度条末尾动态图旋转速度
    memset(pr,'\0',sizeof(pr));
    while(t <= MAX_RATE){
        if(++str_time == STR_TIME){
            strt++;
            str_time = 0;
        }
        printf("[%-100s][%-3d%%][%c]\r",pr,t,str[strt%4]);
        fflush(stdout);
        usleep(WAIT_TIME); //模拟下载的的时间
        pr[t++]=STLYE;
    }
    printf("\n");
}



//可以结合实际场景的进度条版本
void process_v2(double rote)
{
    static char pr[100]={0};
    static int cnt = 0;
    static int num = 0;
    //控制末尾动态旋转速度
    cnt++;
    if(cnt == 100)
    {
        num++;
        cnt = 0;
    }
    if(rote < MAX_RATE && rote >= 0)
    { 
        //实现箭头风格的进度条
        //pr[int(rote)] = STLYE 这个是##风格的进度条
        if(rote < MAX_RATE - 2) 
        {
            pr[(int)rote] = STLYE_BODY;
            pr[(int)rote + 1] = STLYE_HEADER;
        }
        else
        {
            pr[(int)rote] = STLYE_BODY;
        }

        //格式化输出进度条
        printf("[%-100s][%5.1lf%%][%c]\r",pr,rote,str[num%4]);
        //刷新输出缓存区
        fflush(stdout);
    }
}



//下载函数，传入下载目标大小和打印进度条的函数指针
void download(int target,callback_t print_process){
    int now=0;
    while(now<=target)
    {
        print_process(now*100.0/target);
        usleep((rand()%5+1)*200); //模拟下载时间
        now++;
    }
    printf("\n");
}
